package net.xdclass.utils;

import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class PageData implements Serializable {

    // 總數
    private long total;

    // 頁數
    private long page;

    // 返回數據
    private Object currentData;

    /**
     * 傳入IPage, 返回jsondata
     * @param iPage
     * @return
     */
    public static JsonData buildJson(IPage iPage) {
        PageData pageData = new PageData();
        pageData.setPage(iPage.getPages());
        pageData.setTotal(iPage.getTotal());
        pageData.setCurrentData(iPage.getRecords());

        return JsonData.buildSuccess(pageData);
    }

    /**
     * 可以傳入lamda表達式, 把傳入的IPage中數據庫取的數據, 利用map轉換
     * @param iPage
     * @param mapper
     * @param <T> getRecord返回List中的類型
     * @param <R> map后轉換的類型
     * @return
     */
    public static <T, R>JsonData buildJson(IPage iPage, Function<T, R> mapper) {
        PageData pageData = new PageData();
        pageData.setPage(iPage.getPages());
        pageData.setTotal(iPage.getTotal());

        List<R> result = (List<R>) iPage.getRecords().stream().map(mapper).collect(Collectors.toList());

        pageData.setCurrentData(result);

        return JsonData.buildSuccess(pageData);
    }
}
